﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MailMarketing.Models.Entity;
using MailMarketing.Models.Repositorio;

namespace MailMarketing.Controllers
{
    public class ProdutosController : Controller
    {

        private RepositorioProdutos objRepositorioProdutos;

        public ProdutosController()
        {
            this.objRepositorioProdutos = new RepositorioProdutos();
        }

        //
        // GET: /Produtos/
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Index()
        {
            List<Produto> produtos = objRepositorioProdutos.todos();
            return View(produtos);
        }

        //
        // GET: /Produtos/Detalhes/5
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Detalhes(int id)
        {
            Produto produto = objRepositorioProdutos.obterPorId(id);
            return View(produto);
        }

        //
        // GET: /Produtos/Novo
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Novo()
        {
            Produto produto = new Produto();
            return View(produto);
        } 

        //
        // POST: /Produtos/Novo
        [HttpPost]
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Novo(Produto produto)
        {
            try
            {
                objRepositorioProdutos.adicionar(produto);
                return RedirectToAction("Index");
            }
            catch
            {
                return View(produto);
            }
        }
        
        //
        // GET: /Produtos/Edit/5
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Editar(int id)
        {
            Produto produto = objRepositorioProdutos.obterPorId(id);
            return View(produto);
        }

        //
        // POST: /Produtos/Edit/5
        [HttpPost]
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Editar(int id, FormCollection collection)
        {
            Produto objProduto = objRepositorioProdutos.obterPorId(id);
            try
            {
                objProduto.Descricao = collection["Descricao"].ToString();
                objProduto.ValorUnitario = Convert.ToDecimal(collection["ValorUnitario"]);
                objProduto.Qtde = Convert.ToInt32(collection["Qtde"]);

                UpdateModel(objProduto,"Produtos");
                objRepositorioProdutos.salvar();
                return RedirectToAction("Index");
            }
            catch
            {
                return View(objProduto);
            }
        }

        //
        // GET: /Produtos/Excluir/5
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Excluir(int id)
        {
            Produto produto = objRepositorioProdutos.obterPorId(id);
            return View(produto);
        }

        //
        // POST: /Produtos/Excluir/5
        [HttpPost]
        [Authorize(Roles = "Administrador,Controle de Estoque")]
        public ActionResult Excluir(int id, Produto pProduto)
        {
            Produto produto = objRepositorioProdutos.obterPorId(id);

            try
            {
                objRepositorioProdutos.remover(id);
                return RedirectToAction("Index");
            }
            catch
            {
                return View(pProduto);
            }
        }
    }
}
